package iso2.pruebas;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import iso2.dominio.Articulo;
import iso2.persistencia.Agente;
import iso2.persistencia.ConexionesOcupadasException;
import junit.framework.TestCase;

public class TestEliminarArticulo extends TestCase {

	private Connection conexion;
	private Agente agente;

	/* Articulos */
	private Articulo noStock;

	protected void setUp() {
		noStock = new Articulo(1, "articulo1", 1, "articulo1","articulo1","articulo1", 0, false);

		agente = Agente.getInstancia();
		try {
			conexion = agente.getConexion();
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (ConexionesOcupadasException e) {
			e.printStackTrace();
		}
	}

	protected void tearDown() {
		agente.liberarConexion(conexion);
	}

	public void testAnadirPersistencia_ok() {
		/*
		 * Si el método no funciona tirará una excepción y no debe hacerlo. Es un
		 * oráculo en positivo
		 */

		try {
			// Dar de baja es modificar el artículo poniendo el alta a false
			noStock.modificarArticulo();
			PreparedStatement sentencia = conexion
					.prepareStatement("select * from articulo where referencia = ?;");

			sentencia.setInt(1, 1);

			ResultSet resultado = sentencia.executeQuery();
			if (resultado.next()) {
				assertEquals("Comprobando alta en bd", 0,
						resultado.getInt("alta"));
			} else {
				fail("Deber�a devolver algo la consulta");
			}
		} catch (SQLException e) {
			fail(e.toString());
		} catch (ConexionesOcupadasException e) {
			fail(e.toString());
		} catch (Exception e) {
			fail(e.toString());
		}

	}
	
	public void testValidarPersistencia_noExistente() {
		/*
		 * Si el método funciona tirará una excepción y debe hacerlo. Es un
		 * oráculo en negativo
		 */
		try {
			Articulo aux = new Articulo(4);
			aux.setAlta(false);
			aux.modificarArticulo();
			fail("Esperaba excepción");
		}
		
		catch (SQLException e) {}

		catch (ConexionesOcupadasException e) {
			fail(e.toString());
		} catch (Exception e) {
			fail(e.toString());
		}
	}
}